#pragma once
#include "stdafx.h"
#include "PlayerControl.h"
#include "Nest.h"
using namespace sf;
class ChickenDefGame;

class Chicken: public AniSprite{
    // estados (supuestamente hay uno por animacion...)
    enum Status{
        IDLE,
        MOVING_LEFT,
        MOVING_RIGHT,
        MOVING_UP,
        MOVING_DOWN,
        HATCHING,// empollando
		STUNNED //cuando la toca una comadreja
    };

    static const float chickenVel;  // velocidad del movimiento
    Status status;                  // estado actual

    // el controlador de la gallina
    PlayerControl *m_control;
    sf::Vector2f m_dir; // direccion del movimiento
    sf::Vector2f m_intertia;    // inercia del movimiento
	sf::Vector2f m_lastdir; // ultima dir que miro

    sf::RenderWindow *m_renderWindow; // nada mas que para pedirle la vista
    sf::FloatRect m_boundingRegion;

    Nest *m_nest;

	ChickenDefGame *game;
	float timeSinceLastShot;
	float timeSinceStunned;

    // esta funcion revisa que el estado nuevo sea distinto al anterior, para evitar
    // llamar a funciones inutilmente
    void ChangeState(Status newStatus);
	void Shoot();
	bool OnNest();



public:
	void Update(float dt);
	void LeaveNest();
	Chicken(RenderWindow* wnd, PlayerControl *j, ChickenDefGame* _game, sf::Image *i);
};

